const http = require("http");
const fs = require("fs");
const url = require("url");
const qs = require("querystring")

http.createServer((req, res) => {

    if (req.url != "/favicon.ico") {
        if (req.url.includes("/api")) {
            ajax(req, res)
        } else {
            file(req, res)
        }
    }
}).listen(3000, () => {
    console.log("成功监听......@.@");
})


function ajax(req, res) {
    //获取前端发送到的非地址栏数据,post数据
    let str = "";
    //想要获取非地址栏数据,使用data事件,会重复执行,所以找个容器接收他
    req.on("data", (d) => {
        str += d
    });
    //end事件是最后把所有的东西装满
    req.on("end", () => {
        let msg = null;
        if (str) {
            msg = qs.parse(str);
        } else {
            //获取前端发送的地址栏数据就是get数据
            const urlObj = url.parse(req.url, true)
            msg = urlObj.query;
        }
        //绝对拿到前端过来的数据,无论post或者get
        console.log(msg);
        //假设发送过来的数据有一个type字段
        //--login是登录功能
        //--register是注册功能
        if (msg.type === "login") { //登录
            login(req, res, msg)
        } else if (msg.type === "register") { //注册
            register(req, res, msg)
        }
    })

}


//注册:存储用户数据
//登录:读取用户数据
// let userMsg = [{ username: "admin", psssword: 213456 }, {}, {}]


let userMsg = []

function register(req, res, msg) {
    // console.log("注册");
    //注册成功
    //用户名重复

    //1.准备一个状态 
    let flag = false;

    for (let i = 0; i < userMsg.length; i++) {
        //将现有的数据和前端发送过来的数据进行对比
        if (userMsg[i].username === msg.username) {
            flag = true;
            break;
        }
    }
    //判断状态是否被修改为true
    if (flag) {
        res.write(JSON.stringify({ code: 0, title: "用户名重复", msg: "" }))
            // res.write("用户名重复")
    } else {
        //没有该用户信息的时候,就将信息存入到数据中
        // 为false：没有找到重复数据，添加用户数据
        userMsg.push({
                username: msg.username,
                password: msg.password
            })
            //返回信息
            // res.write("注册成功")
        res.write(JSON.stringify({
            code: 1,
            title: "注册成功",
            msg: ""
        }))
    }
    res.end()
}

function login(req, res, msg) {
    console.log("登录");

    //从总数居中找到前端过来的数据进行验证
    // 用户名不存在或者密码不对
    let i = 0;
    //遍历现有的用户信息
    let flag = userMsg.some((val, key) => {
        i = key
        return val.username === msg.username
    })
    if (flag) {
        if (userMsg[i].password === msg.password) {
            userMsg[i].isLogin = "ok"
            res.write(JSON.stringify({
                code: 1,
                title: "登录成功",
                msg: userMsg[i]
            }))
        } else {
            // res.write("密码不符")
            res.write(JSON.stringify({
                code: 0,
                title: "密码不符",
                msg: ""
            }))
        }
    } else {
        //用户名不存在
        // res.write("用户名不存在")
        res.write(JSON.stringify({
            code: 2,
            title: "用户名不存在",
            msg: ""
        }))
    }

    res.end()
}

function file(req, res) {
    //即使后面有get带的参数,通过解析之后也能得到结果,去除后面?的字符,通过pathname来执行
    const ulObj = url.parse(req.url)
        // console.log(ulObj);
    fs.readFile(".." + ulObj.pathname, (err, data) => {
        if (err) {
            res.write("404")
        } else {
            res.write(data)
        }
        res.end()
    })
}